package com.pearl.jacksoncore.demo.core;

import com.fasterxml.jackson.core.JsonEncoding;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;

import java.io.File;
import java.io.IOException;

/**
 * @author TD
 * @version 1.0
 * @date 2024/3/18
 */
public class JsonGeneratorDemo {

    public static void main(String[] args) throws IOException {
        // 1. 创建 JsonFactory
        JsonFactory jsonFactoryByBuilder =JsonFactory.builder().build(); // 方式一：Builder 构建
        JsonFactory jsonFactory = new JsonFactory(); // 方式二：直接 new
        // 2. 创建生成器
        File file = new File("E:\\TD\\pearl\\study-jackson-demo\\jackson-core-demo\\src\\main\\java\\com\\pearl\\jacksoncore\\demo\\file\\user.json");
        JsonGenerator jsonGenerator = jsonFactory.createGenerator(file, JsonEncoding.UTF8);

        // 3. 写操作
        // 3.1 开始写对象=》{
        jsonGenerator.writeStartObject();

        // 3.2 写属性、属性值
        jsonGenerator.writeNumberField("id", 1699632398490275840L); // long
        jsonGenerator.writeStringField("name", "坤坤"); // String
        jsonGenerator.writeNumberField("age", 18); // int

        // 3.3 写对象属性
        jsonGenerator.writeFieldName("org"); // 属性名称
        jsonGenerator.writeStartObject(); // 开始写入对象=》{
        jsonGenerator.writeNumberField("id", 1699967647585800192L); // long
        jsonGenerator.writeStringField("orgName", "阿里巴巴");
        jsonGenerator.writeStringField("address", "浙江杭州");
        jsonGenerator.writeEndObject(); // 结束写入对象=》}

        // 3.3 写对象集合
        jsonGenerator.writeFieldName("roleList"); // 属性名称
        jsonGenerator.writeStartArray();
        // 第一个角色对象
        jsonGenerator.writeStartObject(); // 开始写入对象=》{
        jsonGenerator.writeNumberField("id", 1699972559514243072L); // long
        jsonGenerator.writeStringField("roleName", "系统管理员");
        jsonGenerator.writeStringField("roleCode", "ROLE_ADMIN");
        jsonGenerator.writeEndObject(); // 结束写入对象=》}
        // 第二个角色对象
        jsonGenerator.writeStartObject(); // 开始写入对象=》{
        jsonGenerator.writeNumberField("id", 1701893746586685440L); // long
        jsonGenerator.writeStringField("roleName", "企业员工");
        jsonGenerator.writeStringField("roleCode", "ROLE_STAFF");
        jsonGenerator.writeEndObject(); // 结束写入对象=》}
        jsonGenerator.writeEndArray();

        // 4. 结束并关流
        jsonGenerator.writeEndObject(); // 结束写入对象=》}
        jsonGenerator.close();
    }
}
